#!/bin/bash
#脚本功能：把常用的图片格式（png、jpg、jpeg、webp、tiff）批量转换为PDF格式，多个图片分开生成多个PDF文件”或者“多个图片合并生成一个PDF文件”


#函数功能：使用了*通配符来检查字符串中是否有空格。如果字符串包含空格，contains_space函数将返回真（true），否则返回假（false）。
function contains_space() {
    [[ $1 = *\ * ]]
}


#函数功能：把空格全部替换为'_'下划线"
function space2underline(){
	local file_name_old=$1
	# 使用contains_space函数判断文件名中是否含有空格
	if contains_space "$file_name_old"; then
		file_name_new="${file_name_old// /_}"
		mv "$file_name_old" "$file_name_new";
		echo "$file_name_new"
	else
		echo "$file_name_old"
	fi
}


# 多个图片分开生成多个PDF文件
function images_to_multiple_pdf(){
	# 获取第一个参数
	local new_folder=$1
	
	#for file_name in `ls *.png *.jpg *.jpeg *.webp *.tiff`;do
	for file_name in *;do
		#echo "文件'${file_name}'"
    	if [ "png" == "${file_name##*.}" ];then
			file_name=$(space2underline "$file_name")
			#echo "$file_name"
        	(convert $file_name `echo ../$new_folder/${file_name//.png/.pdf}`) && (echo "${file_name}已成功转为pdf格式") || (echo "${file_name}转换失败")
    	elif [ "jpg" == "${file_name##*.}" ];then
			file_name=$(space2underline "$file_name")
			#echo "$file_name"
        	(convert $file_name `echo ../$new_folder/${file_name//.jpg/.pdf}`) && (echo "${file_name}已成功转为pdf格式") || (echo "${file_name}转换失败")
    	elif [ "jpeg" == "${file_name##*.}" ];then
        	file_name=$(space2underline "$file_name")
			#echo "$file_name"
			(convert $file_name `echo ../$new_folder/${file_name//.jpeg/.pdf}`) && (echo "${file_name}已成功转为pdf格式") || (echo "${file_name}转换失败")
		elif [ "webp" == "${file_name##*.}" ];then
        	file_name=$(space2underline "$file_name")
			#echo "$file_name"
			(convert $file_name `echo ../$new_folder/${file_name//.webp/.pdf}`) && (echo "${file_name}已成功转为pdf格式") || (echo "${file_name}转换失败")
    	elif [ "tiff" == "${file_name##*.}" ];then
        	file_name=$(space2underline "$file_name")
			#echo "$file_name"
			(convert $file_name `echo ../$new_folder/${file_name//.tiff/.pdf}`) && (echo "${file_name}已成功转为pdf格式") || (echo "${file_name}转换失败")
    	#else
        	#echo "仅支持常见的图片格式（png、jpg、jpeg、webp、tiff）才可以转换为PDF格式，其他文件'${file_name}'不支持！"
    	fi
	done
}


# 多个图片合并生成一个PDF文件
function images_to_single_pdf(){
	# 获取第一个参数
	local new_folder=$1
	# 图片名称字符串，例如"1.png 2.jpg"
	local file_names=""
	
	#for file_name in `ls *.png *.jpg *.jpeg *.webp *.tiff`;do
	for file_name in *;do
		#echo "文件'${file_name}'"
    	if [ "png" == "${file_name##*.}" ];then
			file_name=$(space2underline "$file_name")
			#echo "$file_name"
			file_names+=" "$file_name
			#echo "'${file_names}'"
    	elif [ "jpg" == "${file_name##*.}" ];then
			file_name=$(space2underline "$file_name")
			#echo "$file_name"
			file_names+=" "$file_name
			#echo "'${file_names}'"
    	elif [ "jpeg" == "${file_name##*.}" ];then
        	file_name=$(space2underline "$file_name")
			#echo "$file_name"
			file_names+=" "$file_name
			#echo "'${file_names}'"
		elif [ "webp" == "${file_name##*.}" ];then
        	file_name=$(space2underline "$file_name")
			#echo "$file_name"
			file_names+=" "$file_name
			#echo "'${file_names}'"
    	elif [ "tiff" == "${file_name##*.}" ];then
        	file_name=$(space2underline "$file_name")
			#echo "$file_name"
			file_names+=" "$file_name
			#echo "'${file_names}'"
    	#else
        	#echo "仅支持常见的图片格式（png、jpg、jpeg、webp、tiff）才可以转换为PDF格式，其他文件'${file_name}'不支持！"
    	fi
	done
	
	# 删除file_names字符串最前面的空格
	file_names=${file_names#"${file_names%%[![:space:]]*}"}
	echo "'${file_names}'"
	# 多个图片转换为一个pdf
	(convert $file_names `echo ../$new_folder/output.pdf`) && (echo "'${file_names}'已成功转为pdf格式") || (echo "'${file_names}'转换失败")

}


#---------------------------------------------------------------------------------
#函数功能：主函数
#---------------------------------------------------------------------------------
function main(){
	echo "温馨提示：仅支持常见的图片格式（png、jpg、jpeg、webp、tiff）才可以转换为PDF格式，其他文件类型不支持！"
	
	current_datetime=$(date "+%Y-%m-%d %H:%M:%S")
	current_datetime_1=${current_datetime//:/-}
	current_datetime_1=${current_datetime_1// /_}
	
	# 创建新文件夹
	new_folder="output-images_$current_datetime_1"
	# 检查文件夹是否存在
	if [ ! -d "$new_folder" ]; then
    	# 文件夹不存在，创建文件夹
    		mkdir "$new_folder"
	fi
	
	# 存放待转换的图片文件夹
	input_images_folder="input-images"
	# 检查文件夹是否存在
	if [ ! -d "$input_images_folder" ]; then
    	# 文件夹不存在，创建文件夹
    		mkdir "$input_images_folder"
	fi
	# 进入input-images目录
	cd "$input_images_folder"

	# 判断$1参数是否为空，不为空设置input_number
	if [ -z $1 ];then
		# echo "第一个参数为空"
		# 获取当前脚本名称
		local script_name=$(basename "$0")
		echo "请在运行脚本'${script_name}'名称后面,输入参数'1':（多个图片分开生成多个PDF文件）或 参数'2':(多个图片合并生成一个PDF文件)"
		exit
	else
		# echo "第一个参数不为空，值为：$1"
		local input_number=$1
	fi
	
	if [ "1" == "$input_number" ];then
		# 多个图片分开生成多个PDF文件
		images_to_multiple_pdf "$new_folder"
	elif [ "2" == "$input_number" ];then
		# 多个图片合并生成一个PDF文件
		images_to_single_pdf "$new_folder"
	else
		# 获取当前脚本名称
		local script_name=$(basename "$0")
		echo "请在运行脚本'${script_name}'名称后面,输入参数'1':（多个图片分开生成多个PDF文件）或 参数'2':(多个图片合并生成一个PDF文件)"
		exit
	fi
	

	# 进入上一级目录
	cd ..
}


# ---------------执行主函数-------------------
main $1








